#include <proxy/proxy.h>

#include <format>
#include <iostream>
#include <vector>


void formatting_example()
{
    // 创建可格式化的代理
    struct Formattable : pro::facade_builder ::add_skill<pro::skills::format>::build
    {
    };

    // 不同类型的数据
    std::vector<pro::proxy<Formattable>> data;
    data.push_back(pro::make_proxy<Formattable>(42));
    data.push_back(pro::make_proxy<Formattable>(3.14159));
    data.push_back(pro::make_proxy<Formattable>(std::string("Hello")));
    data.push_back(pro::make_proxy<Formattable>(true));

    // 格式化输出
    std::cout << "Formatted data:\n";
    for (size_t i = 0; i < data.size(); ++i)
    {
        std::cout << std::format("  [{}]: {}\n", i, *data[i]);
    }

    // 自定义格式化
    std::cout << "\nCustom formatting:\n";
    std::cout << std::format("  Integer: {:d}\n", *data[0]);
    std::cout << std::format("  Float: {:.2f}\n", *data[1]);
    std::cout << std::format("  String: {:>10}\n", *data[2]);
    std::cout << std::format("  Bool: {}\n", *data[3]);
}